```html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>如何配置ES集群实现高可用性？</title>
    <link href="https://cdn.staticfile.org/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
    <link href="https://cdn.staticfile.org/tailwindcss/2.2.19/tailwind.min.css" rel="stylesheet">
    <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&display=swap" rel="stylesheet">
    <style>
        body {
            font-family: 'Noto Sans SC', Tahoma, Arial, Roboto, "Droid Sans", "Helvetica Neue", "Droid Sans Fallback", "Hiragino Sans GB", Simsun, sans-serif;
            color: #333;
            line-height: 1.8;
        }
        h1, h2, h3, h4 {
            font-family: 'Noto Serif SC', serif;
            font-weight: 700;
            color: #1a1a1a;
        }
        .hero {
            background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);
        }
        .card {
            transition: all 0.3s ease;
            box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05);
        }
        .card:hover {
            transform: translateY(-5px);
            box-shadow: 0 10px 15px rgba(0, 0, 0, 0.1);
        }
        .highlight {
            background: linear-gradient(120deg, #f6d365 0%, #fda085 100%);
            -webkit-background-clip: text;
            background-clip: text;
            color: transparent;
        }
    </style>
</head>
<body class="bg-gray-50">
    <!-- Hero Section -->
    <section class="hero text-white py-20 lg:py-32 px-4 md:px-8 relative overflow-hidden">
        <div class="max-w-6xl mx-auto relative z-10">
            <div class="flex flex-col lg:flex-row items-center">
                <div class="lg:w-1/2 mb-10 lg:mb-0">
                    <h1 class="text-4xl md:text-5xl font-bold mb-6 leading-tight">
                        构建高可用的<br>
                        <span class="highlight">Elasticsearch</span> 集群
                    </h1>
                    <p class="text-xl text-gray-200 mb-8 max-w-lg">
                        探索如何配置ES集群实现无缝故障转移、数据冗余和跨数据中心部署，确保系统24/7稳定运行。
                    </p>
                    <div class="flex space-x-4">
                        <a href="#content" class="bg-white text-indigo-700 px-6 py-3 rounded-lg font-medium hover:bg-gray-100 transition duration-300">
                            <i class="fas fa-book-open mr-2"></i>阅读指南
                        </a>
                        <a href="#visualization" class="border-2 border-white text-white px-6 py-3 rounded-lg font-medium hover:bg-white hover:text-indigo-700 transition duration-300">
                            <i class="fas fa-project-diagram mr-2"></i>架构图解
                        </a>
                    </div>
                </div>
                <div class="lg:w-1/2 flex justify-center">
                    <img src="https://cdn.nlark.com/yuque/0/2024/png/21449790/1725081253836-6768b261-4e43-496a-8fa1-89aeb51d1cd3.png" 
                         alt="Elasticsearch集群架构" 
                         class="rounded-xl shadow-2xl max-w-full h-auto border-4 border-white">
                </div>
            </div>
        </div>
        <div class="absolute inset-0 opacity-10" style="background-image: url('')"></div>
    </section>

    <!-- Main Content -->
    <div id="content" class="max-w-6xl mx-auto px-4 md:px-8 py-12 md:py-20">
        <!-- Introduction -->
        <section class="mb-20">
            <div class="prose prose-lg max-w-none">
                <p class="text-gray-600 text-xl leading-relaxed mb-8">
                    在现代分布式系统中，<strong class="text-indigo-600">高可用性（High Availability, HA）</strong>已经成为一个不可或缺的设计目标。对于一个依赖于实时搜索和数据分析的企业来说，Elasticsearch（ES）是一个至关重要的组件，它不仅支持复杂的数据查询，还能实时处理大规模的数据。
                </p>
                
                <p class="text-gray-600 text-xl leading-relaxed">
                    然而，如果Elasticsearch集群出现问题，比如节点故障或者数据丢失，可能会导致整个系统的服务中断，甚至带来不可估量的损失。因此，如何配置一个高可用性的Elasticsearch集群，确保在面对各种可能的故障时仍能提供稳定可靠的服务，成为每个架构师和工程师必须深入理解和掌握的技术点。我们将从集群的架构设计入手，讨论多主节点配置、数据节点和分片策略，以及如何利用跨数据中心的部署方式来增强集群的容灾能力。
                </p>
            </div>
        </section>

        <!-- High Availability Importance -->
        <section class="mb-20">
            <h2 class="text-3xl font-bold mb-8 relative">
                <span class="absolute left-0 top-1/2 transform -translate-y-1/2 w-16 h-1 bg-indigo-500"></span>
                <span class="pl-20">高可用的重要性</span>
            </h2>
            
            <div class="grid md:grid-cols-2 gap-8 mb-12">
                <div class="card bg-white p-6 rounded-xl">
                    <div class="flex items-center mb-4">
                        <div class="w-12 h-12 rounded-full bg-indigo-100 flex items-center justify-center mr-4">
                            <i class="fas fa-shield-alt text-indigo-600 text-xl"></i>
                        </div>
                        <h3 class="text-xl font-bold">系统稳定性保障</h3>
                    </div>
                    <p class="text-gray-600">
                        高可用性确保系统在出现硬件故障、网络中断、软件错误等问题时，依然能够保持稳定运行。对于许多企业应用和服务而言，尤其是那些面向客户的在线服务，系统的稳定性是至关重要的。任何停机或服务中断都可能导致业务损失、客户流失以及品牌声誉受损。
                    </p>
                </div>
                
                <div class="card bg-white p-6 rounded-xl">
                    <div class="flex items-center mb-4">
                        <div class="w-12 h-12 rounded-full bg-green-100 flex items-center justify-center mr-4">
                            <i class="fas fa-database text-green-600 text-xl"></i>
                        </div>
                        <h3 class="text-xl font-bold">数据安全保护</h3>
                    </div>
                    <p class="text-gray-600">
                        数据安全不仅仅关乎数据的保密性，还涉及数据的完整性和可用性。高可用性通过冗余存储和数据复制策略，确保在单点故障时，数据不会丢失。例如，在数据库或搜索引擎如Elasticsearch的配置中，数据可以被分片并复制到多个节点上。
                    </p>
                </div>
            </div>
            
            <div class="prose prose-lg max-w-none mb-8">
                <p class="text-gray-600">
                    尽管高可用性对于系统稳定性和数据安全有着重要的保障作用，但要实现高可用性往往需要克服多种挑战。这包括系统的复杂性增加、成本的上升、性能的潜在影响等。系统设计者需要在冗余与性能、成本之间找到平衡。
                </p>
            </div>
            
            <div class="bg-indigo-50 border-l-4 border-indigo-500 p-6 rounded-r-lg mb-8">
                <div class="flex">
                    <div class="flex-shrink-0">
                        <i class="fas fa-lightbulb text-indigo-500 text-2xl"></i>
                    </div>
                    <div class="ml-3">
                        <h3 class="text-lg font-medium text-indigo-800">关键建议</h3>
                        <div class="mt-2 text-indigo-700">
                            <p>
                                对于金融、医疗、电子商务等领域，系统的高可用性是不可或缺的，这些行业的业务系统需要24/7的无间断服务支持。高可用性架构设计使得系统能够快速响应并处理故障，确保业务操作的连续性。
                            </p>
                        </div>
                    </div>
                </div>
            </div>
            
            <div class="flex justify-center mt-12">
                <img src="https://cdn.nlark.com/yuque/0/2024/png/21449790/1725081331347-43b92eef-4498-4866-a59c-fae808c2f3d9.png" 
                     alt="高可用性架构" 
                     class="rounded-lg shadow-lg w-full max-w-3xl border">
            </div>
        </section>

        <!-- ES Cluster Architecture -->
        <section class="mb-20">
            <h2 class="text-3xl font-bold mb-8 relative">
                <span class="absolute left-0 top-1/2 transform -translate-y-1/2 w-16 h-1 bg-indigo-500"></span>
                <span class="pl-20">ES集群架构概述</span>
            </h2>
            
            <div class="prose prose-lg max-w-none mb-12">
                <p>
                    Elasticsearch（ES）是一种开源的分布式搜索和分析引擎，广泛应用于实时数据检索、日志分析、全文搜索等场景。为了满足大规模数据处理需求，ES通常以集群的形式部署。
                </p>
            </div>
            
            <div class="flex justify-center mb-12">
                <img src="https://cdn.nlark.com/yuque/0/2024/png/21449790/1725081450667-43661ddc-8bdd-4a87-8ef5-8135c870bf22.png" 
                     alt="ES集群架构" 
                     class="rounded-lg shadow-lg w-full max-w-4xl border">
            </div>
            
            <div class="grid md:grid-cols-2 lg:grid-cols-3 gap-6 mb-12">
                <div class="card bg-white p-6 rounded-xl">
                    <div class="flex items-center mb-4">
                        <div class="w-10 h-10 rounded-full bg-purple-100 flex items-center justify-center mr-4">
                            <i class="fas fa-crown text-purple-600"></i>
                        </div>
                        <h3 class="text-lg font-bold">主节点</h3>
                    </div>
                    <p class="text-gray-600 text-sm">
                        负责管理集群的元数据和索引状态，通过选举机制保证在任何时间只有一个主节点处于活动状态。建议配置多个候选主节点以提高高可用性。
                    </p>
                </div>
                
                <div class="card bg-white p-6 rounded-xl">
                    <div class="flex items-center mb-4">
                        <div class="w-10 h-10 rounded-full bg-blue-100 flex items-center justify-center mr-4">
                            <i class="fas fa-database text-blue-600"></i>
                        </div>
                        <h3 class="text-lg font-bold">数据节点</h3>
                    </div>
                    <p class="text-gray-600 text-sm">
                        存储数据并执行CRUD操作以及聚合等数据相关任务。数据节点通过分片机制实现数据分布式存储和负载均衡，提高数据的可用性和系统的扩展性。
                    </p>
                </div>
                
                <div class="card bg-white p-6 rounded-xl">
                    <div class="flex items-center mb-4">
                        <div class="w-10 h-10 rounded-full bg-green-100 flex items-center justify-center mr-4">
                            <i class="fas fa-network-wired text-green-600"></i>
                        </div>
                        <h3 class="text-lg font-bold">协调节点</h3>
                    </div>
                    <p class="text-gray-600 text-sm">
                        处理客户端请求，将搜索和索引请求转发给相关的节点，并在返回结果前进行数据合并。协调节点不存储数据，只负责请求路由和结果聚合。
                    </p>
                </div>
            </div>
            
            <div class="bg-white rounded-xl shadow-lg overflow-hidden">
                <div class="p-6">
                    <h3 class="text-xl font-bold mb-4 text-indigo-700">分片（Shard）和副本（Replica）机制</h3>
                    <div class="grid md:grid-cols-2 gap-8">
                        <div>
                            <h4 class="font-bold mb-2 text-gray-800">主分片</h4>
                            <p class="text-gray-600 mb-4">
                                每个索引有一个或多个主分片，负责存储实际的数据。主分片的数量在索引创建时确定，并且无法在后续操作中更改。
                            </p>
                            <div class="bg-gray-100 p-4 rounded-lg">
                                <code class="text-sm text-gray-800">PUT /my_index { "settings": { "number_of_shards": 3 } }</code>
                            </div>
                        </div>
                        <div>
                            <h4 class="font-bold mb-2 text-gray-800">副本分片</h4>
                            <p class="text-gray-600 mb-4">
                                副本分片是主分片的副本，主要用于提高数据的可用性和故障恢复能力。当主分片所在的节点故障时，副本分片可以被提升为新的主分片。
                            </p>
                            <div class="bg-gray-100 p-4 rounded-lg">
                                <code class="text-sm text-gray-800">PUT /my_index { "settings": { "number_of_replicas": 1 } }</code>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </section>

        <!-- Multiple Master Nodes -->
        <section class="mb-20">
            <h2 class="text-3xl font-bold mb-8 relative" id="visualization">
                <span class="absolute left-0 top-1/2 transform -translate-y-1/2 w-16 h-1 bg-indigo-500"></span>
                <span class="pl-20">配置多主节点以避免单点故障</span>
            </h2>
            
            <div class="prose prose-lg max-w-none mb-8">
                <p>
                    在Elasticsearch（ES）集群中，配置多个主节点（Master Nodes）是实现高可用性的重要策略。主节点在集群中负责管理和维护集群的元数据和状态（如分片分配、节点加入或离开、索引创建和删除等），因此它的稳定性和可用性对整个集群的正常运行至关重要。
                </p>
            </div>
            
            <div class="flex flex-col lg:flex-row gap-8 mb-12">
                <div class="lg:w-2/3">
                    <div class="bg-white p-6 rounded-xl shadow-lg h-full">
                        <h3 class="text-xl font-bold mb-4 text-indigo-700">多主节点配置步骤</h3>
                        <ol class="space-y-6">
                            <li class="flex items-start">
                                <div class="flex-shrink-0 bg-indigo-100 text-indigo-600 font-bold rounded-full w-8 h-8 flex items-center justify-center mr-4">1</div>
                                <div>
                                    <h4 class="font-bold text-gray-800">确定主节点候选者数量</h4>
                                    <p class="text-gray-600 mt-1">
                                        Elasticsearch建议集群中至少配置3个主节点候选者。这是因为在分布式系统中，通常采用多数派（quorum）机制来进行主节点选举和决策。
                                    </p>
                                </div>
                            </li>
                            <li class="flex items-start">
                                <div class="flex-shrink-0 bg-indigo-100 text-indigo-600 font-bold rounded-full w-8 h-8 flex items-center justify-center mr-4">2</div>
                                <div>
                                    <h4 class="font-bold text-gray-800">主节点的角色配置</h4>
                                    <p class="text-gray-600 mt-1">
                                        在<code>elasticsearch.yml</code>配置文件中，可以通过设置<code>node.master: true</code>来指定节点作为主节点候选者。为了确保这些节点不存储数据并专注于管理集群的元数据，可以同时设置<code>node.data: false</code>。
                                    </p>
                                </div>
                            </li>
                            <li class="flex items-start">
                                <div class="flex-shrink-0 bg-indigo-100 text-indigo-600 font-bold rounded-full w-8 h-8 flex items-center justify-center mr-4">3</div>
                                <div>
                                    <h4 class="font-bold text-gray-800">配置主节点的发现和集群名称</h4>
                                    <p class="text-gray-600 mt-1">
                                        为了让所有节点彼此能够发现，需要配置<code>discovery.seed_hosts</code>来列出所有主节点候选者的地址。还需要设置<code>cluster.initial_master_nodes</code>来指定集群的初始主节点候选者。
                                    </p>
                                    <div class="bg-gray-100 p-4 rounded-lg mt-3">
                                        <pre class="text-sm text-gray-800">discovery.seed_hosts: ["192.168.1.1:9300", "192.168.1.2:9300", "192.168.1.3:9300"]
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]</pre>
                                    </div>
                                </div>
                            </li>
                        </ol>
                    </div>
                </div>
                <div class="lg:w-1/3">
                    <div class="bg-white p-6 rounded-xl shadow-lg h-full">
                        <h3 class="text-xl font-bold mb-4 text-indigo-700">为什么需要多主节点？</h3>
                        <div class="space-y-4">
                            <div class="flex items-start">
                                <div class="flex-shrink-0 text-indigo-500 mr-3 mt-1">
                                    <i class="fas fa-shield-alt"></i>
                                </div>
                                <div>
                                    <h4 class="font-medium text-gray-800">防止单点故障</h4>
                                    <p class="text-gray-600 text-sm mt-1">
                                        单个主节点故障会导致整个集群不可用。多主节点配置确保在主节点故障时，其他候选主节点可以接替其角色。
                                    </p>
                                </div>
                            </div>
                            <div class="flex items-start">
                                <div class="flex-shrink-0 text-indigo-500 mr-3 mt-1">
                                    <i class="fas fa-random"></i>
                                </div>
                                <div>
                                    <h4 class="font-medium text-gray-800">避免脑裂问题</h4>
                                    <p class="text-gray-600 text-sm mt-1">
                                        多数派选举机制可以防止集群分裂为多个小集群，每个小集群各自选出一个主节点，导致数据不一致。
                                    </p>
                                </div>
                            </div>
                            <div class="flex items-start">
                                <div class="flex-shrink-0 text-indigo-500 mr-3 mt-1">
                                    <i class="fas fa-balance-scale"></i>
                                </div>
                                <div>
                                    <h4 class="font-medium text-gray-800">负载均衡</h4>
                                    <p class="text-gray-600 text-sm mt-1">
                                        多个主节点可以分担集群管理任务的负载，提高集群的整体性能。
                                    </p>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            
            <div class="bg-yellow-50 border-l-4 border-yellow-400 p-6 rounded-r-lg">
                <div class="flex">
                    <div class="flex-shrink-0">
                        <i class="fas fa-exclamation-triangle text-yellow-500 text-2xl"></i>
                    </div>
                    <div class="ml-3">
                        <h3 class="text-lg font-medium text-yellow-800">重要注意</h3>
                        <div class="mt-2 text-yellow-700">
                            <p>
                                主节点的可靠性对于集群的稳定性至关重要。建议将主节点部署在不同的物理或虚拟机上，以减少硬件故障对集群的影响。同时，应配置节点之间的专用网络连接，以减少网络分区的风险。
                            </p>
                        </div>
                    </div>
                </div>
            </div>
        </section>

        <!-- Data Nodes and Shard Configuration -->
        <section class="mb-20">
            <h2 class="text-3xl font-bold mb-8 relative">
                <span class="absolute left-0 top-1/2 transform -translate-y-1/2 w-16 h-1 bg-indigo-500"></span>
                <span class="pl-20">数据节点和分片配置</span>
            </h2>
            
            <div class="prose prose-lg max-w-none mb-8">
                <p>
                    在Elasticsearch（ES）集群中，数据节点和分片的配置对于系统的性能、可扩展性以及高可用性具有重要作用。数据节点负责存储索引数据和执行与数据相关的操作，如CRUD（创建、读取、更新、删除）操作以及搜索查询。分片（Shard）是Elasticsearch将数据分块以分布式存储和处理的基本单元。
                </p>
            </div>
            
            <div class="grid md:grid-cols-2 gap-8 mb-12">
                <div>
                    <h3 class="text-xl font-bold mb-4 text-indigo-700">数据节点配置建议</h3>
                    <div class="space-y-6">
                        <div>
                            <h4 class="font-bold text-gray-800 mb-2">内存和堆大小</h4>
                            <p class="text-gray-600">
                                通常建议将系统总内存的一半分配给JVM堆，但不超过32GB，因为超过此值会使JVM失去指针压缩能力，从而降低内存利用率。
                            </p>
                            <div class="bg-gray-100 p-4 rounded-lg mt-3">
                                <pre class="text-sm text-gray-800">-Xms16g
-Xmx16g</pre>
                            </div>
                        </div>
                        <div>
                            <h4 class="font-bold text-gray-800 mb-2">存储配置</h4>
                            <p class="text-gray-600">
                                建议使用SSD（固态硬盘）来提高索引速度和查询性能。分配给Elasticsearch数据存储的磁盘空间应有足够的容量以应对数据增长和分片重新分配的需求。
                            </p>
                        </div>
                    </div>
                </div>
                <div>
                    <h3 class="text-xl font-bold mb-4 text-indigo-700">分片配置策略</h3>
                    <div class="space-y-6">
                        <div>
                            <h4 class="font-bold text-gray-800 mb-2">分片数量</h4>
                            <p class="text-gray-600">
                                主分片的数量应根据集群中数据节点的数量、数据量的大小以及预期的查询负载来配置。通常，每个分片的大小应控制在10GB到50GB之间。
                            </p>
                        </div>
                        <div>
                            <h4 class="font-bold text-gray-800 mb-2">副本分片</h4>
                            <p class="text-gray-600">
                                副本分片数量决定了数据的冗余度和可用性。每个主分片可以有一个或多个副本分片，通常建议配置至少一个副本，以确保在一个节点故障时，数据仍然可用。
                            </p>
                            <div class="bg-gray-100 p-4 rounded-lg mt-3">
                                <pre class="text-sm text-gray-800">PUT /my_index
{
  "settings": {
    "number_of_shards": 5,
    "number_of_replicas": 1
  }
}</pre>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            
            <div class="bg-white rounded-xl shadow-lg overflow-hidden">
                <div class="p-6">
                    <h3 class="text-xl font-bold mb-4 text-indigo-700">分片分配感知（Shard Allocation Awareness）</h3>
                    <p class="text-gray-600 mb-4">
                        用于确保分片尽可能分布在不同的物理机架或可用区上，以提高集群的冗余度和可用性。
                    </p>
                    <div class="grid md:grid-cols-2 gap-6">
                        <div>
                            <div class="bg-gray-100 p-4 rounded-lg">
                                <pre class="text-sm text-gray-800"># 集群配置
cluster.routing.allocation.awareness.attributes: rack_id

# 节点配置
node.attr.rack_id: rack1</pre>
                            </div>
                        </div>
                        <div>
                            <div class="bg-gray-100 p-4 rounded-lg">
                                <pre class="text-sm text-gray-800"># 限制分片分配
cluster.routing.allocation.include._name: log-data-node*</pre>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </section>

        <!-- Cross-Datacenter Deployment -->
        <section class="mb-20">
            <h2 class="text-3xl font-bold mb-8 relative">
                <span class="absolute left-0 top-1/2 transform -translate-y-1/2 w-16 h-1 bg-indigo-500"></span>
                <span class="pl-20">跨数据中心部署</span>
            </h2>
            
            <div class="prose prose-lg max-w-none mb-8">
                <p>
                    在跨数据中心部署Elasticsearch（ES）集群时，目的是提高集群的高可用性、容灾能力以及地理上分布的用户的查询性能。
                </p>
            </div>
            
            <div class="grid md:grid-cols-2 gap-8 mb-12">
                <div>
                    <h3 class="text-xl font-bold mb-4 text-indigo-700">跨数据中心部署的优势</h3>
                    <ul class="space-y-4">
                        <li class="flex items-start">
                            <div class="flex-shrink-0 text-green-500 mr-3 mt-1">
                                <i class="fas fa-check-circle"></i>
                            </div>
                            <div>
                                <h4 class="font-medium text-gray-800">高可用性</h4>
                                <p class="text-gray-600 text-sm mt-1">
                                    将Elasticsearch部署在多个数据中心可以确保即使一个数据中心发生故障，系统仍然可以继续运行。
                                </p>
                            </div>
                        </li>
                        <li class="flex items-start">
                            <div class="flex-shrink-0 text-green-500 mr-3 mt-1">
                                <i class="fas fa-check-circle"></i>
                            </div>
                            <div>
                                <h4 class="font-medium text-gray-800">容灾能力</h4>
                                <p class="text-gray-600 text-sm mt-1">
                                    在灾难发生时，能够迅速恢复数据和服务，减少数据丢失和业务中断。
                                </p>
                            </div>
                        </li>
                        <li class="flex items-start">
                            <div class="flex-shrink-0 text-green-500 mr-3 mt-1">
                                <i class="fas fa-check-circle"></i>
                            </div>
                            <div>
                                <h4 class="font-medium text-gray-800">提高读取性能</h4>
                                <p class="text-gray-600 text-sm mt-1">
                                    通过将数据复制到离用户更近的地理位置，减少网络延迟，提高查询响应速度。
                                </p>
                            </div>
                        </li>
                    </ul>
                </div>
                <div>
                    <h3 class="text-xl font-bold mb-4 text-indigo-700">跨数据中心部署的挑战</h3>
                    <ul class="space-y-4">
                        <li class="flex items-start">
                            <div class="flex-shrink-0 text-red-500 mr-3 mt-1">
                                <i class="fas fa-exclamation-circle"></i>
                            </div>
                            <div>
                                <h4 class="font-medium text-gray-800">网络延迟和带宽</h4>
                                <p class="text-gray-600 text-sm mt-1">
                                    数据中心之间的网络连接通常存在更高的延迟和更低的带宽。这可能会影响到节点之间的数据同步和查询性能。
                                </p>
                            </div>
                        </li>
                        <li class="flex items-start">
                            <div class="flex-shrink-0 text-red-500 mr-3 mt-1">
                                <i class="fas fa-exclamation-circle"></i>
                            </div>
                            <div>
                                <h4 class="font-medium text-gray-800">分片的分布和均衡</h4>
                                <p class="text-gray-600 text-sm mt-1">
                                    如何在不同数据中心之间分布主分片和副本分片，以平衡负载和数据冗余，同时确保高可用性。
                                </p>
                            </div>
                        </li>
                        <li class="flex items-start">
                            <div class="flex-shrink-0 text-red-500 mr-3 mt-1">
                                <i class="fas fa-exclamation-circle"></i>
                            </div>
                            <div>
                                <h4 class="font-medium text-gray-800">故障检测和恢复</h4>
                                <p class="text-gray-600 text-sm mt-1">
                                    当一个数据中心发生故障时，如何确保其他数据中心能够迅速检测并接管工作负载。
                                </p>
                            </div>
                        </li>
                    </ul>
                </div>
            </div>
            
            <div class="bg-white rounded-xl shadow-lg overflow-hidden">
                <div class="p-6">
                    <h3 class="text-xl font-bold mb-4 text-indigo-700">分片分配感知配置示例</h3>
                    <div class="grid md:grid-cols-2 gap-6">
                        <div>
                            <p class="text-gray-600 mb-3">
                                假设有两个数据中心 <code>dc1</code> 和 <code>dc2</code>。每个数据节点都应该配置一个名为 <code>zone</code> 的属性：
                            </p>
                            <div class="bg-gray-100 p-4 rounded-lg">
                                <pre class="text-sm text-gray-800">node.attr.zone: dc1  # 数据中心1的节点配置
node.attr.zone: dc2  # 数据中心2的节点配置</pre>
                            </div>
                        </div>
                        <div>
                            <p class="text-gray-600 mb-3">
                                在Elasticsearch集群的配置中启用分片分配感知：
                            </p>
                            <div class="bg-gray-100 p-4 rounded-lg">
                                <pre class="text-sm text-gray-800">cluster.routing.allocation.awareness.attributes: zone</pre>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </section>

        <!-- ES Fault Tolerance and Recovery -->
        <section class="mb-20">
            <h2 class="text-3xl font-bold mb-8 relative">
                <span class="absolute left-0 top-1/2 transform -translate-y-1/2 w-16 h-1 bg-indigo-500"></span>
                <span class="pl-20">ES的容错和恢复机制</span>
            </h2>
            
            <div class="prose prose-lg max-w-none mb-8">
                <p>
                    Elasticsearch（ES）具有强大的容错和恢复机制，旨在确保在发生硬件故障或系统错误时，集群能够保持高可用性并迅速恢复。
                </p>
            </div>
            
            <div class="grid md:grid-cols-2 gap-8 mb-12">
                <div>
                    <div class="card bg-white p-6 rounded-xl h-full">
                        <div class="flex items-center mb-4">
                            <div class="w-12 h-12 rounded-full bg-blue-100 flex items-center justify-center mr-4">
                                <i class="fas fa-exchange-alt text-blue-600 text-xl"></i>
                            </div>
                            <h3 class="text-xl font-bold">主-副本分片架构</h3>
                        </div>
                        <p class="text-gray-600">
                            Elasticsearch的集群架构基于主-副本分片机制，每个索引由一个或多个主分片（Primary Shard）和相应数量的副本分片（Replica Shard）组成。通过这种架构，Elasticsearch实现了数据冗余和高可用性。
                        </p>
                    </div>
                </div>
                <div>
                    <div class="card bg-white p-6 rounded-xl h-full">
                        <div class="flex items-center mb-4">
                            <div class="w-12 h-12 rounded-full bg-green-100 flex items-center justify-center mr-4">
                                <i class="fas fa-heartbeat text-green-600 text-xl"></i>
                            </div>
                            <h3 class="text-xl font-bold">自动故障检测与恢复</h3>
                        </div>
                        <p class="text-gray-600">
                            Elasticsearch具备自动检测节点故障的能力，通过定期的心跳机制来监控集群中的每个节点。如果某个节点未能在指定时间内响应，主节点会将其标记为失效，并执行分片重新分配和恢复操作。
                        </p>
                    </div>
                </div>
            </div>
            
            <div class="grid md:grid-cols-3 gap-6 mb-12">
                <div class="card bg-white p-6 rounded-xl">
                    <div class="flex items-center mb-3">
                        <div class="w-10 h-10 rounded-full bg-purple-100 flex items-center justify-center mr-3">
                            <i class="fas fa-globe-americas text-purple-600"></i>
                        </div>
                        <h4 class="font-bold">跨节点同步</h4>
                    </div>
                    <p class="text-gray-600 text-sm">
                        在集群中，主分片负责数据的写操作，然后将数据同步到对应的副本分片。同步机制采用先写主分片，再同步到副本分片的模式，确保所有分片的数据一致性。
                    </p>
                </div>
                <div class="card bg-white p-6 rounded-xl">
                    <div class="flex items-center mb-3">
                        <div class="w-10 h-10 rounded-full bg-yellow-100 flex items-center justify-center mr-3">
                            <i class="fas fa-camera text-yellow-600"></i>
                        </div>
                        <h4 class="font-bold">快照与恢复</h4>
                    </div>
                    <p class="text-gray-600 text-sm">
                        Elasticsearch提供了快照和恢复功能，用于定期备份索引数据并在需要时恢复。快照可以存储在本地文件系统、AWS S3、Google Cloud Storage等远程存储中。
                    </p>
                </div>
                <div class="card bg-white p-6 rounded-xl">
                    <div class="flex items-center mb-3">
                        <div class="w-10 h-10 rounded-full bg-red-100 flex items-center justify-center mr-3">
                            <i class="fas fa-brain text-red-600"></i>
                        </div>
                        <h4 class="font-bold">防止脑裂</h4>
                    </div>
                    <p class="text-gray-600 text-sm">
                        通过配置 <code>discovery.zen.minimum_master_nodes</code> 参数，确保集群只有在具有多数（仲裁）节点同意的情况下才能选举新的主节点，从而避免脑裂。
                    </p>
                </div>
            </div>
            
            <div class="bg-indigo-50 border-l-4 border-indigo-500 p-6 rounded-r-lg">
                <div class="flex">
                    <div class="flex-shrink-0">
                        <i class="fas fa-check-circle text-indigo-500 text-2xl"></i>
                    </div>
                    <div class="ml-3">
                        <h3 class="text-lg font-medium text-indigo-800">容错配置建议</h3>
                        <div class="mt-2 text-indigo-700">
                            <ul class="list-disc pl-5 space-y-1">
                                <li>为每个索引配置至少一个副本分片，以确保数据冗余和高可用性</li>
                                <li>在集群中部署足够数量的主节点和数据节点，以保证高可用性和数据冗余</li>
                                <li>配置定期快照备份，以确保在灾难发生时能够快速恢复数据</li>
                            </ul>
                        </div>
                    </div>
                </div>
            </div>
        </section>

        <!-- Summary -->
        <section class="mb-20">
            <div class="bg-gradient-to-r from-indigo-500 to-purple-600 rounded-xl p-8 text-white">
                <h2 class="text-3xl font-bold mb-6">关键要点总结</h2>
                <div class="grid md:grid-cols-2 gap-8">
                    <div>
                        <ul class="space-y-4">
                            <li class="flex items-start">
                                <div class="flex-shrink-0 bg-white text-indigo-600 rounded-full w-6 h-6 flex items-center justify-center mr-4">
                                    <i class="fas fa-check text-xs"></i>
                                </div>
                                <div>
                                    <p class="font-medium">配置3个或更多主节点候选者以避免单点故障</p>
                                </div>
                            </li>
                            <li class="flex items-start">
                                <div class="flex-shrink-0 bg-white text-indigo-600 rounded-full w-6 h-6 flex items-center justify-center mr-4">
                                    <i class="fas fa-check text-xs"></i>
                                </div>
                                <div>
                                    <p class="font-medium">合理配置分片数量和副本数量以实现负载均衡和数据冗余</p>
                                </div>
                            </li>
                            <li class="flex items-start">
                                <div class="flex-shrink-0 bg-white text-indigo-600 rounded-full w-6 h-6 flex items-center justify-center mr-4">
                                    <i class="fas fa-check text-xs"></i>
                                </div>
                                <div>
                                    <p class="font-medium">使用分片分配感知实现跨数据中心部署，提高容灾能力</p>
                                </div>
                            </li>
                        </ul>
                    </div>
                    <div>
                        <ul class="space-y-4">
                            <li class="flex items-start">
                                <div class="flex-shrink-0 bg-white text-indigo-600 rounded-full w-6 h-6 flex items-center justify-center mr-4">
                                    <i class="fas fa-check text-xs"></i>
                                </div>
                                <div>
                                    <p class="font-medium">监控集群健康状况，设置自动警报机制</p>
                                </div>
                            </li>
                            <li class="flex items-start">
                                <div class="flex-shrink-0 bg-white text-indigo-600 rounded-full w-6 h-6 flex items-center justify-center mr-4">
                                    <i class="fas fa-check text-xs"></i>
                                </div>
                                <div>
                                    <p class="font-medium">定期进行快照备份，确保灾难恢复能力</p>
                                </div>
                            </li>
                            <li class="flex items-start">
                                <div class="flex-shrink-0 bg-white text-indigo-600 rounded-full w-6 h-6 flex items-center justify-center mr-4">
                                    <i class="fas fa-check text-xs"></i>
                                </div>
                                <div>
                                    <p class="font-medium">优化JVM堆大小和硬件配置以提高性能</p>
                                </div>
                            </li>
                        </ul>
                    </div>
                </div>
            </div>
        </section>
    </div>

    <!-- Footer -->
    <footer class="bg-gray-900 text-gray-400 py-8 px-4 md:px-8">
        <div class="max-w-6xl mx-auto">
            <div class="flex flex-col md:flex-row justify-between items-center">
                <div class="mb-4 md:mb-0">
                    <h3 class="text-white text-lg font-medium">技术小馆</h3>
                    <p class="text-sm">专注于技术分享与知识传播</p>
                </div>
                <div>
                    <a href="http://www.yuque.com/jtostring" class="text-gray-300 hover:text-white transition duration-300">
                        <i class="fas fa-globe mr-2"></i>http://www.yuque.com/jtostring
                    </a>
                </div>
            </div>
            <div class="border-t border-gray-800 mt-6 pt-6 text-center text-sm">
                <p>© 2024 技术小馆. 保留所有权利.</p>
            </div>
        </div>
    </footer>

    <script>
        // 简单的滚动动画效果
        document.querySelectorAll('a[href^="#"]').forEach(anchor => {
            anchor.addEventListener('click', function (e) {
                e.preventDefault();
                
                document.querySelector(this.getAttribute('href')).scrollIntoView({
                    behavior: 'smooth'
                });
            });
        });
    </script>
</body>
</html>
```